package br.com.duosoftware.orcamento.services;

import br.com.duosoftware.orcamento.daos.FonteDeRecursoDespesaDAO;
import br.com.duosoftware.orcamento.entidades.FonteDeRecursoDespesa;

/**
 *
 * @author Renato.Machado
 * 
 */
public class FonteDeRecursoDespesaService {
    
    public boolean verificarTotalValorFonteDeRecurso(FonteDeRecursoDespesa fonteDeRecursoDespesa) {

        FonteDeRecursoDespesaDAO fonteDeRecursoDespesaDAO = new FonteDeRecursoDespesaDAO();

        double totalFonteDeDespesa = fonteDeRecursoDespesaDAO.obterSomaDoValorDasFontesDeDespesa(fonteDeRecursoDespesa.getOrcamento());

        boolean retorno;
        
        if (fonteDeRecursoDespesa.getId() != null) {
            /* 
             * CASO TENHAMOS UM ORCAMENTO ESTAMOS EDITANDO ALGUM ITEM. PARA TANTO, 
             * DEVEMOS FAZER OS DEVIDOS CALCULOS PARA ENTÃO FAZER A VERIFICAÇÃO DOS
             * VALORES - PEGO O TOTAL DA SOMA DAS DESPESAS, DIMINUO DO VALOR QUE JÁ
             * TINHA ESTAVA NO ORCAMENTO E SOMO O NOVO VALOR (QUE ESTÁ SENDO DIGITADO)
             */
            retorno = ( totalFonteDeDespesa - fonteDeRecursoDespesaDAO.getfonteDeRecursoDespesaPorId(fonteDeRecursoDespesa.getId()).getValorFonteRecurso() + fonteDeRecursoDespesa.getValorFonteRecurso() ) <= fonteDeRecursoDespesa.getOrcamento().getValorDespesa();
            
        } else {
            /* NESTE CASO O USUÁRIO ESTÁ ADICIONANDO UM NOVO ORÇAMENTO
             * ENTÃO, APENAS SOMO OS VALORES JÁ ADICIONADOS COM O VALOR 
             * QUE ESTÁ SENDO DIGITADO 
             */
            retorno = (totalFonteDeDespesa + fonteDeRecursoDespesa.getValorFonteRecurso()) <= fonteDeRecursoDespesa.getOrcamento().getValorDespesa();
            
        }
        return retorno;
    }
    
}
